package com.example.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.entity.EmpCertificate;
import com.example.entity.EmpEducation;
import com.example.entity.EmpWorkHistory;
import com.example.entity.Employee;
import com.example.dto.EmployeeDTO;
import com.example.dto.EmployeeQuery;

import java.util.Date;
import java.util.List;

/**
 * 员工服务接口
 */
public interface EmployeeService extends IService<Employee> {
    
    /**
     * 分页查询员工列表
     *
     * @param page  分页参数
     * @param query 查询条件
     * @return 分页结果
     */
    Page<Employee> page(Page<Employee> page, EmployeeQuery query);
    
    /**
     * 获取员工详情
     *
     * @param id 员工ID
     * @return 员工详情DTO
     */
    EmployeeDTO getEmployeeById(Long id);
    
    /**
     * 新增员工
     *
     * @param dto 员工DTO
     * @return 员工ID
     */
    Long addEmployee(EmployeeDTO dto);
    
    /**
     * 修改员工
     *
     * @param dto 员工DTO
     */
    void updateEmployee(EmployeeDTO dto);
    
    /**
     * 删除员工
     *
     * @param id 员工ID
     */
    void deleteEmployee(Long id);
    
    /**
     * 批量删除员工
     *
     * @param ids 员工ID列表
     */
    void batchDeleteEmployee(List<Long> ids);
    
    /**
     * 获取员工证书列表
     *
     * @param employeeId 员工ID
     * @return 证书列表
     */
    List<EmpCertificate> getCertificateList(Long employeeId);
    
    /**
     * 保存员工证书
     *
     * @param certificate 证书
     */
    void saveCertificate(EmpCertificate certificate);
    
    /**
     * 删除员工证书
     *
     * @param id 证书ID
     */
    void deleteCertificate(Long id);
    
    /**
     * 获取员工教育经历列表
     *
     * @param employeeId 员工ID
     * @return 教育经历列表
     */
    List<EmpEducation> getEducationList(Long employeeId);
    
    /**
     * 保存员工教育经历
     *
     * @param education 教育经历
     */
    void saveEducation(EmpEducation education);
    
    /**
     * 删除员工教育经历
     *
     * @param id 教育经历ID
     */
    void deleteEducation(Long id);
    
    /**
     * 获取员工工作经历列表
     *
     * @param employeeId 员工ID
     * @return 工作经历列表
     */
    List<EmpWorkHistory> getWorkHistoryList(Long employeeId);
    
    /**
     * 保存员工工作经历
     *
     * @param workHistory 工作经历
     */
    void saveWorkHistory(EmpWorkHistory workHistory);
    
    /**
     * 删除员工工作经历
     *
     * @param id 工作经历ID
     */
    void deleteWorkHistory(Long id);
    
    /**
     * 获取员工详情
     *
     * @param employeeId 员工ID
     * @return 员工详情
     */
    Employee getEmployeeDetail(Long employeeId);
    
    /**
     * 新增员工信息
     *
     * @param employee 员工基本信息
     * @param educationList 教育经历列表
     * @param workHistoryList 工作经历列表
     * @param certificateList 证书列表
     * @return 是否成功
     */
    boolean insertEmployee(Employee employee, List<EmpEducation> educationList, 
                         List<EmpWorkHistory> workHistoryList, List<EmpCertificate> certificateList);
    
    /**
     * 员工转正
     *
     * @param employeeId 员工ID
     * @param regularDate 转正日期
     * @return 是否成功
     */
    boolean confirmRegular(Long employeeId, Date regularDate);
    
    /**
     * 员工离职
     *
     * @param employeeId 员工ID
     * @param leaveDate 离职日期
     * @param leaveReason 离职原因
     * @return 是否成功
     */
    boolean employeeLeave(Long employeeId, Date leaveDate, String leaveReason);
} 